/*
 * Copyright (C) 2009 2DAI
 *
 * Este programa es Software Libre; usted puede redistribuirlo
 * y/o modificarlo bajo los términos de la "GNU General Public
 * License" como lo publica la "FSF Free Software Foundation",
 * o (a su elección) de cualquier versión posterior.
 *
 * Este programa es distribuido con la esperanza de que le será
 * útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
 * implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
 * particular. Vea la "GNU General Public License" para más
 * detalles.
 *
 * Usted debe haber recibido una copia de la "GNU General Public
 * License" junto con este programa, si no, escriba a la "FSF
 * Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 */
package logic;

import data.DataRecord;
import gui.MainWindow;
import gui.RecordView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.SwingWorker;
import on.Record;
import util.CrearPDF;
import gui.ResultsModified;

/**
 *
 * Author: Alejandro Jaramillo Perez
 * CoAuthor: Jorge Garrido Oval
 * Esta clase se ocupa de la logica de la ventana de acta y de implementar
 * sus datos.
 */
public class RecordLogic extends SwingWorker<Void, Void> implements ActionListener {

    private DataRecord dataRecord;
    private MainWindow mainWindow;
    private RecordView recordView;
    private Record on_record;
    private ResultsModified resulMod;
    private int id;

    public RecordLogic(MainWindow mw) {
        mainWindow = mw;
        recordView = new RecordView(this);
    }

    public RecordLogic(MainWindow mw, int id) {
        this(mw);
        this.id = id;
    }

    private void cargarDatosObjeto() {

        //on_record.setCelebrado  = on_record.getJTFcelebrado().getText();
        on_record.setLocalSocial(recordView.getJTFlocal().getText());
        on_record.getEquipoVisitante().setNombre(recordView.getJTFequipoLocal().getText());
        on_record.getEquipoVisitante().setNombre(recordView.getJTFequipoVisitante().getText());
        on_record.setLiga(recordView.getJTFcompeticion().getText());
        //on_record.setFase(recordView.getJTFfase().getText());
        //on_record.setGrupo(recordView.getJTFgrupo().getText());
        on_record.setMesa(recordView.getJTFmesa().getText());
        on_record.setCategoria(recordView.getJTFcategoria().getText());
        on_record.setDelegadoLocal(recordView.getJTFdelegadoLocal().getText());
        on_record.setDelegadoVisitante(recordView.getJTFdelegadoVisitante().getText());
        on_record.setEntrenadorLocal(recordView.getJTFentrenadorLocal().getText());
        on_record.setEntrenadorVisitante(recordView.getJTFentrenadorVisitante().getText());
        on_record.getArbitro().setNombre(recordView.getJTFarbitroNombre().getText());

        //on_record.setCapitanGanador(recordView.getJTFcapitanGanador().getText());
        //on_record.setCapitanPerdedor(recordView.getJTFcapitanPerdedor().getText());
        on_record.setEquipoGanador(recordView.getJTFresultadoGanador().getText());
        on_record.setGames_result(recordView.getJTFresultadoGeneral().getText());
        on_record.setGames_winner(recordView.getJTFresultadoJuegos().getText());
    //on_record.getArbitro.setNumCole(recordView.getJTFarbitroNumColegiado().getText());
    }

    /**
     * Recibe un entero id, requiere el acta y la carga
     * @param id
     */
    public void mostrarActa(int id) {
        this.id = id;
        on_record = dataRecord.requerir(id);
        recordView.mostrarActa(on_record);
        if (!recordView.isVisible()) {
            recordView.setVisible(true);
        }
        if(on_record.getVerified()){
            recordView.getJBModificar().setEnabled(true);
        }
    }

    private void mostrarActaCargada() {
        recordView.mostrarActa(on_record);
        if (!recordView.isVisible()) {
            recordView.setVisible(true);
        }
        if(on_record.getVerified()){
            recordView.getJBModificar().setEnabled(true);
        }
    }

    /**
     * Vuelve el acta visible o no
     * @param boo booleano para mostrar o no el acta
     */
    public void setVisible(boolean boo) {
        recordView.setVisible(boo);
    }

    /**
     * Devuelve la vista del acta
     * @return recordView
     */
    public RecordView getVista() {
        return recordView;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    protected Void doInBackground() {
        setProgress(50);
        this.setVisible(true);
        dataRecord = new DataRecord();
        mainWindow.getJDPescritorio().add(recordView);
        mostrarActa(id);
        setProgress(100);
        return null;
    }

    /**
     * Acción para el boton de PDF's
     */
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("pdf")) {
            new CrearPDF(on_record.toString(), id).verPDF();
        } else if (e.getActionCommand().startsWith("modificar")) {
            String aux = e.getActionCommand();
            resulMod = new ResultsModified(null, false, Integer.parseInt(aux.substring(9)), this);
            mainWindow.getJDPescritorio().add(resulMod);
            resulMod.setVisible(true);
        } else if (e.getActionCommand().equals("protestada")) {
            new AbsThread(6, mainWindow, null, "Acta protestada").start();
        } else if (e.getActionCommand().equals("Cancelar")) {
            resulMod.dispose();
        } else if (e.getActionCommand().equals("Aceptar")) {
            resulMod.dispose();
            cambiarDatosPartido(resulMod.getPosicion(), resulMod.datosModificados());
        } else if (e.getActionCommand().equals("Validar")) {
            recordView.modificarDesactivado();
            
            cargarDatosObjeto();
            mostrarActaCargada();
        //Comentado el metodo de guardar debido a fallos en el dataRecord guardar(on.Record.java)
        //dataRecord.guardar(on_record);
        } else if (e.getActionCommand().equals("cancelar")) {
            recordView.modificarDesactivado();

        } else if (e.getActionCommand().equals("modi")) {
            recordView.modificarActivado();
        }

    }

    /**
     * Recibe un numero que se utiliza para
     * identificar el panel
     * @param actionCommand
     */
    private void cambiarDatosPartido(int numero, String[] datos) {
        on_record.setResultados(datos, numero);
    }
}
